Skip to main content

Scope & Extent

Scope

variable, function, class

  • scope 有大小区分,外部变量可以在外部及内部访问,内部变量只能在内部访问
  • 变量的 scope 从声明以后开始
  • 内部可以声明同名变量,会覆盖外部
/**
* Scope.js
* 测试JavaScript的作用域
*/
let a = 5;
let b = 6;
console.log("1: ", a, b);

if (a > 0) {
a = 4;
let b = 3;
console.log("2: ", a, b);
} else {
let b = 4;
console.log("3: ", a, b);
}

console.log("4: ", a, b);

Extent

变量可以访问的时间段,从分配内存给它,到收回它的内存之间的时间

变量的生存期跟作用域一致,出了作用域,生存期结束,变量所占用的内存也被释放

变量的生存期跟语法上的作用域不一致,退出作用域以后仍然会存在

实现作用域

BlockScope scope = (BlockScope) cr.node2Scope.get(ctx);  //获得Scope
StackFrame frame = new StackFrame(scope); //创建一个栈桢
pushStack(frame); //加入栈中

...

//运行完毕,弹出栈
stack.pop();